﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Rendiciones.Logica.Enumeradores;
using Rendiciones.Logica.Modelos;
using Rendiciones.Logica.Servicios;
using Rendiciones.Web.infraestructura;

namespace Rendiciones.Web.Tesoreria
{
    public partial class PagarRendicion : PageBase
    {
        private static ServGastos _servGastos;
        public Usuario usuario;
        public Rendicion rendicion;
        protected void Page_Load(object sender, EventArgs e)
        {
            Button btnYes = (Button)ctrlVerGasto.FindControl("BtnAceptar");
            btnYes.Click += new EventHandler(ctrlAgregarGasto_btnYes_Click);
            usuario = (Usuario)Session["usuario"];
            if (usuario == null) Response.Redirect("~/IniciarSesion.aspx");

            if (!IsPostBack)
            {
                rendicion = new Rendicion();
                _servGastos = new ServGastos();
                DropDownList1.DataTextField = "Nombre";
                DropDownList1.DataValueField = "IdProyecto";
                ddlBancoDeposito.DataTextField = ddlTransferenciaBanco.DataTextField = "Descripcion";
                ddlBancoDeposito.DataValueField = ddlTransferenciaBanco.DataValueField = "IdBanco";

                CargarCombos();

                var idRendicion = int.Parse(Session["RendicionParaCargar"].ToString());
                rendicion = _servGastos.CargarRendicionPorId(idRendicion);
                rendicion.DetallesGasto = _servGastos.BuscarGastosDeRendicion(rendicion.IdRendicion).Where(g => !g.Rechazado && !g.Eliminado).ToList();
                CargarRendicionSolicitada(rendicion);
                Session["RendicionParaCargar"] = null;
                
            }
        }

        void ctrlAgregarGasto_btnYes_Click(object sender, EventArgs e)
        {
            Session["index"] = null;
        }

        public void CargarCombos()
        {
            //DropDownList1.DataSource = _servGastos.TodosLosProyectosAsociados(usuario.IdUsuario, ERol.Administrador);
            //DropDownList1.DataBind();

            var bancos = Modulos.Rendiciones.Bancos.Buscar();
            ddlBancoDeposito.DataSource = bancos;
            ddlBancoDeposito.DataBind();
            ddlTransferenciaBanco.DataSource = bancos;
            ddlTransferenciaBanco.DataBind();
        }

        protected void grRendicion_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            var index = int.Parse(e.CommandArgument.ToString());

            Session["index"] = index;

            if (e.CommandName == "Editar")
            {
                var gastos = (List<Gasto>)Session["datasource"];
                var gasto = gastos[index];
                ctrlVerGasto.NroGasto = (index + 1).ToString();
                ctrlVerGasto.CargaDatosAPopup(gasto);
            }
        }

        public void CargarRendicionSolicitada(Rendicion rendicion)
        {
            Session["IdRendicion"] = rendicion.IdRendicion;
            Session["datasource"] = rendicion.DetallesGasto;
            var proyectos = new List<Proyecto>();
            var proyecto = Modulos.Rendiciones.Proyectos.Leer(rendicion.IdProyecto);
            proyectos.Add(proyecto);
            DropDownList1.DataSource = proyectos;
            DropDownList1.DataBind();
            DropDownList1.SelectedIndex = rendicion.IdProyecto;
            TextBox1.Text = rendicion.CentroCosto;
            TextBox2.Text = rendicion.FondoAsignado.ToString();
            TextBox3.Text = rendicion.Saldo.ToString();
            lblTitulo.Text = "Rendicion Nro : " + rendicion.IdRendicion;
            lblusuarioIngreso.Text = "Usuario Ingreso : " + rendicion.UsuarioIngreso;



            grRendicion.DataSource = rendicion.DetallesGasto;
            grRendicion.DataBind();
            CalcularMonto();

        }

        protected void btnAceptar_Click(object sender, EventArgs e)
        {
            var idRendicion = (int) Session["IdRendicion"];
            Modulos.Rendiciones.WorkFlows.Salida(idRendicion, EEstadoRendicion.ConfirmacionEnTesoreria, DateTime.Now);

            var idBanco = 0;
            if (string.IsNullOrEmpty(ddlBancoDeposito.SelectedValue))
            {
                if (!string.IsNullOrEmpty(ddlTransferenciaBanco.SelectedValue))
                {
                    idBanco = int.Parse(ddlTransferenciaBanco.SelectedValue);
                }
            }
            else
            {
                idBanco = int.Parse(ddlBancoDeposito.SelectedValue);
            }

            var pago = new PagoRendicion
                {
                    IdRendicion = idRendicion,
                    Monto = string.IsNullOrEmpty(txtMontoAPagar.Text) ? 0 : int.Parse(txtMontoAPagar.Text),
                    NroChequeDesde = string.IsNullOrEmpty(txtNroChequeDesde.Text) ? 0 : int.Parse(txtNroChequeDesde.Text),
                    NroChequeHasta = string.IsNullOrEmpty(txtNroChequeHasta.Text) ? 0 : int.Parse(txtNroChequeHasta.Text),
                    NroDeposito = string.IsNullOrEmpty(txtNroDeposito.Text) ? 0 : int.Parse(txtNroDeposito.Text),
                    NroTransferencia = string.IsNullOrEmpty(txtNroTransferencia.Text) ? 0 : int.Parse(txtNroTransferencia.Text),
                    IdBanco = idBanco
                };
            _servGastos.PagarRendicion(pago);

            var proyecto = Modulos.Rendiciones.Proyectos.Leer(int.Parse(DropDownList1.SelectedValue));
            Modulos.Rendiciones.WorkFlows.Entrada(idRendicion, EEstadoRendicion.Pagado, DateTime.Now, proyecto.IdAdministrador, UsuarioConectado.IdUsuario);

            

            MostrarOk("Rendición Pagada Satisfactoriamente", "Menu.aspx");
            
        }

        public void CalcularMonto()
        {
            var gastos = (List<Gasto>) Session["datasource"];
            var monto = gastos.Sum(gasto => gasto.TotalPagado);
            txtMontoAPagar.Text = monto.ToString();
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Session["datasource"] = null;
            Session["IdRendicion"] = null;
            Session["index"] = null;
            Response.Redirect("PendientesDePago.aspx");
        }
        
    }
}